package com.bjc.activiti.service;

import java.util.List;
import java.util.Map;

import com.bjc.activiti.bean.request.DeployFlowReqVO;
import com.bjc.activiti.bean.request.MyTaskReqVO;
import com.bjc.activiti.bean.response.ApproveRecordVO;
import com.bjc.activiti.bean.response.BackStepVO;
import com.bjc.activiti.bean.response.DeployFlowVO;
import com.bjc.activiti.bean.response.MyTaskVO;

/**
 * Activiti流程接口
 * 
 * @author 陈皓
 * @date 2017年11月13日
 */
public interface IActivitiService {
	/**
	 * 获取instanceId
	 * @param flowKey
	 * @param businessId
	 * @return
	 */
	String getInstanceId(String flowKey,String businessId);
	/**
	 * 部署流程
	 * 
	 * @param flowName 流程名称
	 * @param bpmnName 流程图文件名（不用后缀）
	 */
	boolean deployFlow(String flowName, String bpmnName);

	/**
	 * 查询所有部署流程
	 * 
	 * @param flowName
	 * @param flowKey
	 * @return
	 */
	List<DeployFlowVO> getDeployFlow(DeployFlowReqVO deployFlowReqVO);

	/**
	 * 送批
	 * 
	 * @param businessId 业务ID
	 * @param flowKey 流程key
	 * @param map {user:"申请人",user1:"一级审批节点",....}
	 * @return "1" 待审批
	 */
	String sendFlow(String flowKey,String businessId,Map<String, Object> map);

	/**
	 * 
	 * 通过
	 * 
	 * @param instanceId 实例ID
	 * @param taskId 任务ID
	 * @param comment 审批意见
	 * @return "1"待审批"2"通过
	 */
	String passFlow(String instanceId,String taskId,String comment);

	/**
	 * 获取驳回步骤
	 * 
	 * @param instanceId 实例ID
	 */
	List<BackStepVO> getBackStep(String instanceId);
	
	/**
	 * 驳回
	 * 
	 * @param instanceId 实例ID
	 * @param taskId 任务ID
	 * @param nextStep 驳回节点
	 * @param comment 驳回原因
	 */
	String backFlow(String instanceId,String taskId,String nextStep,String comment);

	/**
	 * 终止
	 * 
	 * @param instanceId 实例ID
	 * @param taskId 任务ID
	 */
	String overFlow(String instanceId,String taskId);

	/**
	 * 获取审批记录
	 * 
	 * @param instanceId 实例ID
	 */
	List<ApproveRecordVO> getApproveRecord(String instanceId);

	/**
	 * 获取待办任务
	 * 
	 * @param assignee 办理人
	 * @param applyUser 申请人
	 * @param flowName 流程名称
	 * @param startTime 开始时间
	 * @param endTime 结束时间
	 * @return
	 */
	List<MyTaskVO> getWaitDoTask(MyTaskReqVO myTaskReqVO);

	/**
	 * 获取已办任务
	 * 
	 * @param assignee 办理人
	 * @param applyUser 申请人
	 * @param flowName 流程名称
	 * @param startTime 开始时间
	 * @param endTime 结束时间
	 * @return
	 */
	List<MyTaskVO> getAlreadyDoTask(MyTaskReqVO myTaskReqVO);

	/**
	 * 转审
	 * @param taskId 任务ID
	 * @param toUser 转审到人
	 */
	void transferApprove(String taskId, String toUser);
	
	/**
	 * 挂起流程
	 * @param instanceId
	 */
	void suspendFlow(String instanceId);
	
	/**
	 * 激活流程
	 * @param instanceId
	 */
	void activateFlow(String instanceId);
}
